#!/bin/bash
# kibana 快捷docker安装运行
# 创建目录并移动脚本的函数
function createStart() {
    local dockerVolumes="$1"
    local name="$2"
    local port="$3"
    local scriptName="${name}.sh"
    local destination="/${dockerVolumes}/${name}/"
    rm -rf "${destination}"
    # 为脚本添加执行权限
    chmod +x "${scriptName}"

    # 使用 mkdir -p 创建父目录（如果不存在）
    mkdir -p "${destination}/${port}"

    # 删除已存在的脚本文件
    [ -f "/${dockerVolumes}/${name}/${scriptName}" ] && rm -rf "/${dockerVolumes}/${name}/${scriptName}"

    # 在移动之前检查脚本文件是否存在
    if [ -f "${scriptName}" ]; then
        cp "${scriptName}" "/${dockerVolumes}/${name}/"
        echo "脚本 '${scriptName}' 已复制到 '/${dockerVolumes}/${name}/'"
    else
        echo "错误：当前目录中找不到脚本 '${scriptName}'"
        exit 1
    fi
}
function dockerCreateStart() {
    name="$1"
    version="$2"
    asName="$3"
    portMap=$4
    volumesMap=$5
    dockerMap=$6
    copyDockerMap=$7
    lastDockerMap=$8
    #MYSQL_ROOT_PASSWORD=$9

    # 拉取 Docker 镜像（取消注释以启用）
    # docker pull "${name}:${version}"

    # 删除同名容器
    docker rm -f "${asName}" &>/dev/null

    dockerRun="docker run "
    dockerRunTemp="docker run " 


    if [ "${#portMap[@]}" -eq 0 ]; then
        echo ""
    else
        # 添加端口映射参数
        for element in "${portMap[@]}"; do
            dockerRun+="-p $element "
            dockerRunTemp+="-p $element "
        done
    fi

    if [ "${#dockerMap[@]}" -eq 0 ]; then
        echo ""
    else
        # 添加其他 Docker 参数
        for element in "${dockerMap[@]}"; do
            dockerRun+="$element "
            dockerRunTemp+="$element "
        done
    fi


    if [ "${#volumesMap[@]}" -eq 0 ]; then
        echo ""
    else
        # 添加卷映射参数
        for element in "${volumesMap[@]}"; do
            dockerRun+="-v $element "
        done
    fi

    dockerRun+="${name}:${version} "
    dockerRunTemp+="${name}:${version} "

    # 添加镜像及额外参数
    if [ "${#lastDockerMap[@]}" -eq 0 ]; then
        echo ""
    else
        for element in "${lastDockerMap[@]}"; do
            dockerRun+=" $element "
            dockerRunTemp+=" $element "
        done
    fi

    echo "$dockerRunTemp"
    eval "$dockerRunTemp"

    if [ "${#copyDockerMap[@]}" -eq 0 ]; then
        echo ""
    else
        echo "复制 开始"
        # 复制 Docker 映射文件
        for element in "${copyDockerMap[@]}"; do
            echo "复制 $element"
            IFS=':' read -r source dest <<< "$element"
            echo "docker cp ${asName}:${source} ${dest}"
            docker cp "${asName}":"${source}" "${dest}"
        done

        echo "复制 完成"
    fi


    # 删除同名容器
    #docker rm -f "${asName}" &>/dev/null

    echo "正式启动挂载"
    echo "$dockerRun"
    #eval "$dockerRun"
    #$dockerRun
    
    #read -r -p "查看 $name 运行日志?【Y/N】" input
    #if [ "$input,," =~ ^(YES|Y)$ ]; then
    #    docker logs -f -t ${asName}
    #else
    #    echo ""
    #fi
}
function main(){

    #docker run -d \
    #--name kibana \
    #-e ELASTICSEARCH_HOSTS=http://es:9200 \
    #--network=es-net \
    #-p 5601:5601  \
    #kibana:7.12.1
    # 默认值
    networkName="common-network"
    dockerVolumes="docker-volumes"
    #镜像名
    name="kibana"
    #别名
    asName="kibana"
    #版本
    version="7.12.1"
    port="5601"
    ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    portMap=("$port:5601" )
    #挂载地址
    v0="/etc/localtime:/etc/localtime"
    v1="/$dockerVolumes/$name/$port/config:/usr/share/kibana/config"
    #v2="/$dockerVolumes/$name/plugins:/usr/share/elasticsearch/plugins"
    #v3="/$dockerVolumes/$name/logs:/usr/share/elasticsearch/logs"

    volumesMap=("$v0" "$v1")

    #环境配置
    dockerMap=("--restart=always" "-d" "--name=${asName}" "--network=${networkName}")
    dockerMap+=("--privileged")
    dockerMap+=("-e ELASTICSEARCH_HOSTS=$ELASTICSEARCH_HOSTS") 

  

    lastDockerMap=()
    #lastDockerMap+=("")
    #容器地址:宿主机地址
    cp1="/usr/share/kibana:/$dockerVolumes/$name/$port/"
    copyDockerMap=("$cp1")

    # 输出关于设置的信息
    echo "============================================="
    echo "        ${name} Docker 安装挂载启动          "
    echo "============================================="
    docker network create "$networkName"
    # 使用 createStart 函数创建挂载目录
    echo "创建挂载目录..."
    createStart "${dockerVolumes}" "${name}"

    # 使用 dockerCreateStart 函数运行 Docker 容器
    dockerCreateStart "${name}" "${version}" "${asName}" $portMap $volumesMap $dockerMap $copyDockerMap $lastDockerMap #$MYSQL_ROOT_PASSWORD

    echo "============================================="
    echo "        ${name} Docker 安装挂载启动成功         "
    echo "============================================="
    for element in "${volumesMap[@]}"; do
    echo "        ${asName} Docker 挂载目录：            "
        echo ${element}
    done
    echo "============================================="
    sudo docker logs -f -n 200 $asName
}
main